extern "C"
{
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
}
int main(int argc, char *argv[])
{
    av_log_set_level(AV_LOG_DEBUG);
    av_log(nullptr, AV_LOG_DEBUG, "av_log_set_level\n");
    auto frame1 = av_frame_alloc();
    frame1->width = 401;
    frame1->height = 300;
    frame1->format = AV_PIX_FMT_RGB24;
    // 使用默认对齐，是32字节
    // int ret = av_frame_get_buffer(frame1, 0);
    int ret = av_frame_get_buffer(frame1, 4);
    if (ret < 0)
    {
        char buf[1024];
        av_strerror(ret, buf, sizeof(buf));
        av_log(nullptr, AV_LOG_ERROR, buf);
        return -1;
    }
    av_log(nullptr, AV_LOG_DEBUG, "linesize: %d\n", frame1->linesize[0]);
    if (frame1->buf[0])
    {
        av_log(nullptr, AV_LOG_DEBUG, "frame1 ref count = %d\n", av_buffer_get_ref_count(frame1->buf[0]));
    }
    auto frame2 = av_frame_alloc();
    av_frame_ref(frame2, frame1);
    //
    av_log(nullptr, AV_LOG_DEBUG, "frame1 ref count = %d\n", av_buffer_get_ref_count(frame1->buf[0]));
    av_log(nullptr, AV_LOG_DEBUG, "frame2 ref count = %d\n", av_buffer_get_ref_count(frame2->buf[0]));
    //把frame2对应的数据的引用计数减一，并把data置为nullptr
    av_frame_unref(frame2);
    av_log(nullptr, AV_LOG_DEBUG, "frame1 ref count = %d\n", av_buffer_get_ref_count(frame1->buf[0]));
    av_log(nullptr, AV_LOG_DEBUG, "frame2 ref count = %d\n", frame2->buf[0]);
    
    av_frame_free(&frame1);
    av_frame_free(&frame2);
    return 0;
}